﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DTO;
namespace DAO
{
    public class NhanVienDAO : DataProvider
    {


        protected override object GetDataFromDataRow(DataTable dt, int i)
        {
            NhanVienDTO objectDTO = new NhanVienDTO();
            objectDTO.TenLoaiNV = dt.Rows[i]["TenLoaiNV"].ToString();
            objectDTO.MaNhanVien = int.Parse(dt.Rows[i]["MaNhanVien"].ToString());
            objectDTO.NgayNhanChuc = DateTime.Parse(dt.Rows[i]["NgayNhanChuc"].ToString());
            objectDTO.TenNhanVien = dt.Rows[i]["TenNhanVien"].ToString();
            objectDTO.UserNameNV = dt.Rows[i]["UserNameNV"].ToString();
            objectDTO.PassWordNV = dt.Rows[i]["PassWordNV"].ToString();
            return (object)objectDTO;
        }

        public NhanVienDTO[] GetAll()
        {
            String strSQL = "Select NhanVien.MaNhanVien,NhanVien.TenNhanVIen,Max(NhanVien_CT.NgayNhanChuc) as NgayNhanChuc,LOAINHANVIEN.TenLoaiNV,NhanVien.UserNameNV,NhanVien.PasswordNV from NHANVIEN,NHANVIEN_CT,LOAINHANVIEN Where NHANVIEN.MaNhanVien = NHANVIEN_CT.MaNhanVien and LOAINHANVIEN.MaLoaiNV=NHANVIEN_CT.MaLoaiNV group by NhanVien.MaNhanVien,NhanVien.TenNhanVien,UserNameNV,PassWordNV,LOAINHANVIEN.TenLoaiNV,NHANVIEN_CT.NgayNhanChuc order by NHANVIEN.MaNhanVien,NHANVIEN_CT.NgayNhanChuc DESC";
            DataTable dt = new DataProvider().ExecuteQuery(strSQL);

            String strSQL1 = "select NHANVIEN.MaNhanVien,max(NHANVIEN_CT.NgayNhanCHuc) as NgayNhanChuc from NHANVIEN,NHANVIEN_CT where NHANVIEN.MaNhanVien = NHANVIEN_CT.MaNhanVien group by NHANVIEN.MaNhanVien order by NHANVIEN.MaNhanVien";
            DataTable dt1 = new DataProvider().ExecuteQuery(strSQL1);

            NhanVienDTO[] nhanvienDTOs = new NhanVienDTO[dt.Rows.Count];

            for (int i = 0; i < dt1.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    if (int.Parse(dt.Rows[j][0].ToString()) == int.Parse(dt1.Rows[i][0].ToString()))
                    {

                        nhanvienDTOs[j] = (NhanVienDTO)GetDataFromDataRow(dt, j);
                    }

                }


            }

            return nhanvienDTOs;
        }

        public bool insert(NhanVienDTO info)
        {
            bool flag = false;
            string insertCommand = "INSERT NHANVIEN(TenNhanVien,UserNameNV,PassWordNV) VALUES('" +
                info.TenNhanVien + "', '" +
                info.UserNameNV + "','" +
                info.PassWordNV + "')";

            flag = ExecuteNonQuery(insertCommand);
            if (flag == true)
            {
                String sql = "select max(MaNhanVien) from NHANVIEN";
                DataTable dt = new DataProvider().ExecuteQuery(sql);
                String manv = dt.Rows[0][0].ToString();

                String insertCommand1 = "INSERT NHANVIEN_CT(MaNhanVien,MaLoaiNV,NgayNhanChuc) VALUES(" +
                manv + ", " +
                info.MaLoaiNV + ",'" +
                info.NgayNhanChuc.ToShortDateString() + "')";

                flag = ExecuteNonQuery(insertCommand1);
            }
            return flag;
        }
        public NhanVienDTO[] ChiTietNV(int manv)
        {
            String strSQL = "Select NhanVien.TenNhanVIen,LOAINHANVIEN.TenLoaiNV,NhanVien_CT.NgayNhanChuc from NHANVIEN,NHANVIEN_CT,LOAINHANVIEN Where NHANVIEN.MaNhanVien = NHANVIEN_CT.MaNhanVien and LOAINHANVIEN.MaLoaiNV=NHANVIEN_CT.MaLoaiNV and NHANVIEN_CT.MaNhanVien=" + manv + " order by NgayNhanChuc";
            DataTable dt = new DataProvider().ExecuteQuery(strSQL);

            NhanVienDTO[] nhanvienDTOs = new NhanVienDTO[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; i++)
                nhanvienDTOs[i] = (NhanVienDTO)GetDataFromDataRow_new(dt, i);

            return nhanvienDTOs;
        }
        protected object GetDataFromDataRow_new(DataTable dt, int i)
        {
            NhanVienDTO objectDTO = new NhanVienDTO();
            objectDTO.TenNhanVien = dt.Rows[i]["TenNhanVien"].ToString();
            objectDTO.TenLoaiNV = dt.Rows[i]["TenLoaiNV"].ToString();
            objectDTO.NgayNhanChuc = DateTime.Parse(dt.Rows[i]["NgayNhanChuc"].ToString());
            return (object)objectDTO;
        }
        //public void update(NhanVienDTO info)
        //{
        //    string updateCommand = "UPDATE NHANVIEN " +
        //                            "SET TenNhanVien = '" + info.TenNhanVien + "', " +
        //                            " MaLoaiNV = " + info.MaLoaiNV + 
        //                            " WHERE MaNhanVien = " + info.MaNhanVien;

        //    ExecuteNonQuery(updateCommand);
        //}

        //public void delete(string maLoaiNV)
        //{
        //    string deleteCommand = "DELETE FROM NHANVIEN WHERE MaLoaiNV = " + maLoaiNV;
        //    ExecuteNonQuery(deleteCommand);
        //}
        public int CheckLogin(String Username, String Pass)
        {
            String strSQL = "Select MaNhanVien from NHANVIEN Where UsernameNV='" + Username + "' AND PassWordNV='" + Pass + "'";
            int MaNhanVien = this.ExcuteScalar(strSQL);
            return MaNhanVien;
        }
        public int GetMaLoaiNV(int MaNhanVien)
        {
            String strSQL = "Select MaLoaiNV from NHANVIEN_CT Where MaNhanVien=" + MaNhanVien;
            int MaLoaiNV = this.ExcuteScalar(strSQL);
            return MaLoaiNV;
        }
    }
}
